//import from(导入) 后面的字符串如果没有路径
//程序自动会到node_modules下查找
//导入系统模块
import axios from 'axios';
//引入qs模块
/*
 该模块有两主要方法
 stringify 将对象系列化
 parse   将字符串对象化
 * */
import qs from 'qs';
import Vue from 'vue';

// 配置api的基础路径,所有通过axios发起的请求都会以该路径为基础
axios.defaults.baseURL = process.env.VUE_APP_ROOTAPI;


// 请求的拦截器,所有的请求都会经过这个拦截器
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    const token = localStorage.getItem("token");
    // 为每个请求头都添加认证TOKEN,注意由于后台使用的是JSON WEB TOKEN,
    //所有token 之前要带上 Bearer空格
    //当我们在请求头里带上token的时候,浏览器默认将这个请求视作复杂请求
    /*当请求被视作复杂请求的时候,浏览器会对服务器发起两次请求
        第一次请求: OPTIONS,这个请求的作用,检测是否能够正常连接服务器
        第二次请求: get/post,这个请求就是正式请求数据
    */
    config.headers.common['Authorization'] = 'Bearer '+token;
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });
 
//响应的拦截器
axios.interceptors.response.use(function (response) {
    // Do something with response data
    return response;
  }, function (error) {
    // Do something with response error
    return Promise.reject(error);
  });

//获取基础路径,根据不同的环境得不同的路径
//var rootApi = process.env.VUE_APP_ROOTAPI;

//为了axios设定基础路径
//所有的axios请求,都会自动将baseURL设置请求的基础地址
//例如/signin 实际上访问的是http://localhost:3000/signin
//axios.defaults.baseURL = rootApi;

var myAxios = {
	//单独封装get和post
	get:(url,params)=>{
		//将prams转换成字符串,使用qs库来转换
		//{username:'zmt',passwrod:123} ? username=zmt&password=123
		//http://localhost:3000/signin?username=zmt&password=123
//		url += "?" + qs.stringify(params);
		return axios.get(url,{params:params}).
		then((resp)=>{
			return resp;
		})
	},	
	//config(配置的意思)
	/*
	 url:请求的地址
	 data:请求的数据
	 config:axios特殊配置,主要是用来处理上传文件时的配置
	 * */
	post:(url,data,config)=>{
		return axios.post(url,qs.stringify(data),config).
			then((resp)=>{
				return resp;
			})
	}
	
}
//将封装好的axios对象注册成全局变量,可以在所有组件通过this.$http的方式访问该对象
Vue.prototype.$http = myAxios;

//导出一个对象
export default myAxios;
	





//请求状态监测函数
//function checkStatus(response){
//	var successStuatus = ["200","304"
//	if(response && (successStuatus.indexOf(response.status)!=-1)){
//		return response;
//	}
//	return {
//		status:404,
//		msg:
//	}
//	
//}
